home *** CD-ROM | disk | FTP | other *** search
- package org.apache.xalan.xslt;
-
- import java.util.Hashtable;
- import java.util.Vector;
- import org.apache.xalan.xpath.KeyDeclaration;
- import org.apache.xalan.xpath.NodeListImpl;
- import org.apache.xalan.xpath.XObject;
- import org.apache.xalan.xpath.dtm.DTM;
- import org.apache.xalan.xpath.dtm.DTMProxy;
- import org.apache.xalan.xpath.xml.PrefixResolver;
- import org.apache.xalan.xpath.xml.XMLParserLiaison;
- import org.apache.xalan.xpath.xml.XMLParserLiaisonDefault;
- import org.w3c.dom.Element;
- import org.w3c.dom.NamedNodeMap;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
- import org.xml.sax.SAXException;
-
- public class KeyTable {
- Node m_docKey;
- Hashtable m_keys = new Hashtable();
-
- KeyTable(Node var1, Node var2, PrefixResolver var3, String var4, Vector var5, XMLParserLiaison var6) throws SAXException {
- this.m_docKey = var1;
- XMLParserLiaison var7 = var6;
-
- Node var43;
- try {
- DTMProxy var10000 = (DTMProxy)var1;
- DTMProxy var32 = (DTMProxy)var2;
- int var34 = var32.getDTMNodeNumber();
- DTM var36 = var32.getDTM();
- boolean var38 = false;
-
- for(int var40 = var34; var40 != -1; var40 = var36.getNextNode(var34, var40)) {
- DTMProxy var42 = var36.getNode(var40);
- int var44 = var5.size();
- int var45 = 0;
-
- label242: {
- KeyDeclaration var46;
- NodeList var48;
- int var49;
- String var50;
- while(true) {
- if (var45 >= var44) {
- break label242;
- }
-
- var46 = (KeyDeclaration)var5.elementAt(var45);
- if (var46.m_name.equals(var4)) {
- if (var46.m_buildState == KeyDeclaration.BUILDING) {
- var38 = true;
- break label242;
- }
-
- var46.m_buildState = KeyDeclaration.BUILDING;
- double var17 = var46.m_match.getMatchScore(var7, var42);
- if (var17 == Double.NEGATIVE_INFINITY) {
- var46.m_buildState = KeyDeclaration.BUILT;
- } else {
- XObject var47 = var46.m_use.execute(var6, var42, var3);
- var48 = null;
- var50 = null;
- if (var47.getType() != 4) {
- var49 = 1;
- var50 = var47.str();
- break;
- }
-
- var48 = var47.nodeset();
- if (var48.getLength() != 0) {
- var49 = var48.getLength();
- break;
- }
-
- var46.m_buildState = KeyDeclaration.BUILT;
- }
- }
-
- ++var45;
- }
-
- for(int var52 = 0; var52 < var49; ++var52) {
- if (var48 != null) {
- Node var53 = var48.item(var52);
- var50 = XMLParserLiaisonDefault.getNodeData(var53);
- }
-
- if (var50 != null) {
- Object var55 = this.m_keys.get(var46.m_name);
- Hashtable var54;
- if (var55 == null) {
- var54 = new Hashtable();
- this.m_keys.put(var46.m_name, var54);
- } else {
- var54 = (Hashtable)var55;
- }
-
- Object var57 = var54.get(var50);
- NodeListImpl var56;
- if (var57 == null) {
- var56 = new NodeListImpl();
- var54.put(var50, var56);
- } else {
- var56 = (NodeListImpl)var57;
- }
-
- boolean var58 = false;
- int var59 = ((Vector)var56).size();
-
- for(int var30 = 0; var30 < var59; ++var30) {
- if (var42 == var56.item(var30)) {
- var58 = true;
- break;
- }
- }
-
- if (!var58) {
- ((Vector)var56).addElement(var42);
- }
- }
- }
-
- var46.m_buildState = KeyDeclaration.BUILT;
- }
-
- if (var38) {
- break;
- }
- }
- } catch (ClassCastException var31) {
- for(Node var8 = var2; var8 != null; var8 = var43) {
- int var9 = var5.size();
- NamedNodeMap var10 = null;
- int var11;
- if (var8.getNodeType() == 1) {
- var10 = ((Element)var8).getAttributes();
- var11 = var10.getLength();
- if (var11 == 0) {
- var10 = null;
- }
- } else {
- var11 = 0;
- }
-
- Node var12 = var8;
- int var13 = -1;
-
- while(var13 < var11) {
- int var14 = 0;
-
- label250: {
- KeyDeclaration var15;
- NodeList var19;
- int var20;
- String var21;
- while(true) {
- if (var14 >= var9) {
- break label250;
- }
-
- var15 = (KeyDeclaration)var5.elementAt(var14);
- if (var15.m_name.equals(var4)) {
- if (var15.m_buildState == KeyDeclaration.BUILDING) {
- return;
- }
-
- var15.m_buildState = KeyDeclaration.BUILDING;
- double var16 = var15.m_match.getMatchScore(var7, var12);
- if (var16 == Double.NEGATIVE_INFINITY) {
- var15.m_buildState = KeyDeclaration.BUILT;
- } else {
- XObject var18 = var15.m_use.execute(var7, var12, var3);
- var19 = null;
- var21 = null;
- if (var18.getType() != 4) {
- var20 = 1;
- var21 = var18.str();
- break;
- }
-
- var19 = var18.nodeset();
- if (var19.getLength() != 0) {
- var20 = var19.getLength();
- break;
- }
-
- var15.m_buildState = KeyDeclaration.BUILT;
- }
- }
-
- ++var14;
- }
-
- for(int var22 = 0; var22 < var20; ++var22) {
- if (var19 != null) {
- Node var23 = var19.item(var22);
- var21 = XMLParserLiaisonDefault.getNodeData(var23);
- }
-
- if (var21 != null) {
- Object var24 = this.m_keys.get(var15.m_name);
- Hashtable var51;
- if (var24 == null) {
- var51 = new Hashtable();
- this.m_keys.put(var15.m_name, var51);
- } else {
- var51 = (Hashtable)var24;
- }
-
- Object var26 = var51.get(var21);
- NodeListImpl var25;
- if (var26 == null) {
- var25 = new NodeListImpl();
- var51.put(var21, var25);
- } else {
- var25 = (NodeListImpl)var26;
- }
-
- boolean var27 = false;
- int var28 = ((Vector)var25).size();
-
- for(int var29 = 0; var29 < var28; ++var29) {
- if (var12 == var25.item(var29)) {
- var27 = true;
- break;
- }
- }
-
- if (!var27) {
- ((Vector)var25).addElement(var12);
- }
- }
- }
-
- var15.m_buildState = KeyDeclaration.BUILT;
- }
-
- ++var13;
- if (var10 != null) {
- var12 = var10.item(var13);
- }
- }
-
- var43 = var8.getNodeType() != 1 && var8.getNodeType() != 9 ? null : var8.getFirstChild();
-
- while(var43 == null && var2 != var8) {
- var43 = var8.getNextSibling();
- if (var43 == null) {
- var8 = var8.getParentNode();
- if (var2 == var8 || var8 == null) {
- var43 = null;
- break;
- }
- }
- }
- }
- }
-
- int var33 = var5.size();
-
- for(int var35 = 0; var35 < var33; ++var35) {
- KeyDeclaration var37 = (KeyDeclaration)var5.elementAt(var35);
- Object var39 = this.m_keys.get(var37.m_name);
- if (var39 == null) {
- Hashtable var41 = new Hashtable();
- this.m_keys.put(var37.m_name, var41);
- }
- }
-
- }
-
- public NodeList getNodeSetByKey(String var1, String var2) {
- Object var3 = null;
- Object var4 = this.m_keys.get(var1);
- if (var4 != null) {
- Object var5 = ((Hashtable)var4).get(var2);
- if (var5 != null) {
- var3 = (NodeList)var5;
- } else {
- var3 = new NodeListImpl();
- }
- }
-
- return (NodeList)var3;
- }
- }
-